package com.hongyi.controller;

import java.util.List;

import javax.servlet.http.HttpServletRequest;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import com.github.pagehelper.PageInfo;
import com.hongyi.pojo.ResultObject;
import com.hongyi.pojo.TScore;
import com.hongyi.pojo.TStudent;
import com.hongyi.service.IScoreService;
import com.hongyi.util.Constant;

@RequestMapping("/score")
@RestController //标识为返回类型为Json的控制
public class ScoreController {
	/**
	 * 注入成绩
	 */
	@Autowired
	private IScoreService scoreService;

	/**
	 * 添加成绩
	 * @param score
	 * @return
	 */
    @RequestMapping("/addScore")
    public ResultObject<Object> addScore(TScore score) {
    	ResultObject<Object> rs=scoreService.insertScore(score);
    	return rs;
    }


	/**
	 * 查询所有成绩
	 * @param score
	 * @param limit
	 * @param page
	 * @return
	 */
	@RequestMapping("/getAllScore")
	public ResultObject<List<TScore>> getAllScore(TScore score, @RequestParam("limit") int limit, @RequestParam("page") int page) {
		// 使用@RequestMapping注解将HTTP请求映射到这个方法，URL路径为"/getAllScore"
		// 这个方法接受一个名为score的自定义对象，以及名为"limit"和"page"的整数参数

		// 调用scoreService的getAllScore方法来获取分页数据
		PageInfo<TScore> pageInfo = scoreService.getAllScore(score, limit, page);

		// 创建一个ResultObject对象，用于封装响应数据
		ResultObject<List<TScore>> rs = new ResultObject<List<TScore>>();

		// 从分页数据中提取TScore对象的列表
		List<TScore> list = pageInfo.getList();

		// 对列表中的每个TScore对象进行处理，将scoreType转换为相应的名称
		for (TScore temp : list) {
			String type = temp.getScoreType();
			if ("1".equals(type)) {
				temp.setScoreTypeName("语文");
			} else if ("2".equals(type)) {
				temp.setScoreTypeName("数学");
			} else if ("3".equals(type)) {
				temp.setScoreTypeName("英语");
			}
		}

		// 设置ResultObject对象的状态码、消息、数据和总数
		rs.setCode(Constant.SUCCESS_RETUEN_CODE);
		rs.setMsg("查询成功");
		rs.setData(list);
		rs.setCount(pageInfo.getTotal());

		// 返回ResultObject对象，该对象将被转换为JSON并作为HTTP响应发送给客户端
		return rs;
	}


	/**
	 * 更新成绩
	 * @param score
	 * @return
	 */
    @RequestMapping("/updateScore")
    public ResultObject<Object> updateScore(TScore score) {
    	Integer total=scoreService.updateScore(score);
    	//统一返回
    	ResultObject<Object> rs=new ResultObject<Object>();
    	if(null==total||0==total) {
    		rs.setCode(Constant.FAILURE_RETUEN_CODE);
    		rs.setMsg("修改学生成绩信息失败");
    	}else {
    		rs.setCode(Constant.SUCCESS_RETUEN_CODE);
    		rs.setMsg("修改学生成绩信息成功");
    	}
    	return rs;
    }

	/**
	 * 删除成绩
	 * @param score
	 * @return
	 */
    @RequestMapping("/deleteScore")
    public ResultObject<Object> deleteScore(TScore score) {
    	Integer total=scoreService.deleteScore(score.getScoreId());
    	//统一返回
    	ResultObject<Object> rs=new ResultObject<Object>();
    	if(null==total||0==total) {
    		rs.setCode(Constant.FAILURE_RETUEN_CODE);
    		rs.setMsg("删除学生成绩信息失败");
    	}else {
    		rs.setCode(Constant.SUCCESS_RETUEN_CODE);
    		rs.setMsg("删除学生成绩信息成功");
    	}
    	return rs;
    }

	/**
	 * 查询所有成绩
	 * @param student
	 * @param limit
	 * @param page
	 * @return
	 */
    @RequestMapping("/getAllSumScore")
    public ResultObject<List<TStudent>> getAllSumScore(TStudent student,@RequestParam("limit") int limit,@RequestParam("page") int page) {
    	PageInfo<TStudent> pageInfo =scoreService.getAllFinalScore(student, limit, page);
    	ResultObject<List<TStudent>> rs=new ResultObject<List<TStudent>>();
    	rs.setCode(Constant.SUCCESS_RETUEN_CODE);
    	rs.setMsg("查询成功");
    	rs.setData(pageInfo.getList());
    	rs.setCount(pageInfo.getTotal());
    	return rs;
    	
    }

	/**
	 * 查询个人成绩
	 * @param request
	 * @param limit
	 * @param page
	 * @return
	 */
	@RequestMapping("/getMyScore")
	public ResultObject<List<TStudent>> getMyScore(HttpServletRequest request, @RequestParam("limit") int limit, @RequestParam("page") int page) {
		// 使用@RequestMapping注解将HTTP请求映射到这个方法，URL路径为"/getMyScore"
		// 这个方法接受一个HttpServletRequest对象、名为"limit"和"page"的整数参数

		// 从HttpServletRequest对象中获取当前用户的TStudent对象（通常存储在会话中）
		TStudent student = (TStudent) request.getSession().getAttribute("student");

		// 调用scoreService的getAllFinalScore方法来获取该学生的最终成绩数据
		PageInfo<TStudent> pageInfo = scoreService.getAllFinalScore(student, limit, page);

		// 创建一个ResultObject对象，用于封装响应数据
		ResultObject<List<TStudent>> rs = new ResultObject<List<TStudent>>();

		// 设置ResultObject对象的状态码、消息、数据和总数
		rs.setCode(Constant.SUCCESS_RETUEN_CODE);
		rs.setMsg("查询成功");
		rs.setData(pageInfo.getList());
		rs.setCount(pageInfo.getTotal());

		// 返回ResultObject对象，该对象将被转换为JSON并作为HTTP响应发送给客户端
		return rs;
	}


	/**
	 * 获取个人信息
	 * @param request
	 * @param limit
	 * @param page
	 * @return
	 */
	@RequestMapping("/getMyScoreInfo")
	public ResultObject<List<TScore>> getMyScoreInfo(HttpServletRequest request, @RequestParam("limit") int limit, @RequestParam("page") int page) {
		// 使用@RequestMapping注解将HTTP请求映射到这个方法，URL路径为"/getMyScoreInfo"
		// 这个方法接受一个HttpServletRequest对象、名为"limit"和"page"的整数参数

		// 从HttpServletRequest对象中获取当前用户的TStudent对象（通常存储在会话中）
		TStudent student = (TStudent) request.getSession().getAttribute("student");

		// 创建一个TScore对象，设置学生ID为当前用户的学生编号
		TScore score = new TScore();
		score.setStudentId(student.getStudentNo());

		// 调用scoreService的getAllScore方法来获取该学生的成绩数据
		PageInfo<TScore> pageInfo = scoreService.getAllScore(score, limit, page);

		// 创建一个ResultObject对象，用于封装响应数据
		ResultObject<List<TScore>> rs = new ResultObject<List<TScore>>();

		// 从分页数据中提取TScore对象的列表
		List<TScore> list = pageInfo.getList();

		// 对列表中的每个TScore对象进行处理，将scoreType转换为相应的名称
		for (TScore temp : list) {
			String type = temp.getScoreType();
			if ("1".equals(type)) {
				temp.setScoreTypeName("语文");
			} else if ("2".equals(type)) {
				temp.setScoreTypeName("数学");
			} else if ("3".equals(type)) {
				temp.setScoreTypeName("英语");
			}
		}

		// 设置ResultObject对象的状态码、消息、数据和总数
		rs.setCode(Constant.SUCCESS_RETUEN_CODE);
		rs.setMsg("查询成功");
		rs.setData(list);
		rs.setCount(pageInfo.getTotal());

		// 返回ResultObject对象，该对象将被转换为JSON并作为HTTP响应发送给客户端
		return rs;
	}

}
